/**
 * Created by WuHao on 2017/1/31.
 */

var express = require('express');
var router = express.Router(); // 创建路由对象,
var user = require('../models/user');

const PAGE_SIZE = 10;

/**
 * 每次路由都会进入该函数,进行判断
 */
router.use(function(req, res, next){
    if(!req.userInfo.isAdmin){
        res.send('你不是管理员，无法进入后台管理');
        return;
    }
    next();
});

router.get('/', function(req, res, next){
    res.render('admin/index', {
        userInfo: req.userInfo
    });
});

router.get('/user/list', function(req, res, next){

    var condition = {};

    user.count(condition, function(err, pageCount){

        /**
         * pageNo 当前页,默认第一页
         * pageSize 每一页数量, 默认10条
         * pageCount 总数量, 查询数据库得出
         * pageTotal 总页数, 总数量除以每一页显示的数量, 除不断+1页
         *
         * limit(Number) 限制数据条数
         * skip(Number) 跳过数据条数
         *     配合limit和skip实现分页
         *
         * 例如：
         *  每页显示2条
         *      第一页显示1-2: skip(0) limit(2)
         *      第二页显示3-4: skip(2) limit(2)
         *      第三页显示5-6: skip(4) limit(2)
         *      第四页显示7-8: skip(6) limit(2)
         *
         *  算法
         *      limit = pageSize;
         *      skip = (pageNo - 1) * pageSize
         *
         */
        var pageNo = Number(req.query.pageNo) || 1,
            pageSize = Number(req.query.pageSize) || PAGE_SIZE,
            pageTotal = Math.ceil(pageCount/pageSize);

            // 处理边界情况
            pageNo = Math.min(pageNo, pageTotal);  // 当前页和总页数，取最小的值
            pageNo = Math.max(pageNo, 1);          // 当前页和1, 取最大值
            var skip = (pageNo - 1) * pageSize;

        user.find(condition).limit(pageSize).skip(skip).then(function(userList){

            var pageTotalArray = getPageTotalArray(pageTotal, pageNo);

            res.render('admin/user_list', {
                userInfo:req.userInfo,
                resultList: userList,
                page:{
                    pageSize:pageSize,
                    pageNo:pageNo,
                    pageCount: pageCount,
                    pageTotal:pageTotal,
                    pageTotalArray: pageTotalArray
                }
            });
        });
    });
});

/**
 * 算法: 获取分页总页数数组，给页面提供循环
 * @param pageTotal
 * @param pageNo
 * @returns {Array.<T>}
 */
function getPageTotalArray(pageTotal, pageNo) {
    var pageTotalArray = [];

    /**
     * 如果当前页减去4小于等于0, 那么就从当前页减1开始,一直循环到0结束,否则就循环到当前页减4为止 (保证前面有4个分页按钮)
     */
    for(var i=pageNo-1; i>=(pageNo-4 <= 0 ? 1 : pageNo-4); i--){
        pageTotalArray.push(i);
    }

    /**
     * 取得当前页
     */
    pageTotalArray.push(pageNo);

    /**
     * 如果当前页加上4大于等于总页数, 那么就从当前页加1开始,一直循环到总页数结束,否则就循环到当前页加4为止 (保证后面有4个分页按钮)
     */
    for(var i=pageNo+1; i<=(pageNo+4 >= pageTotal ? pageTotal : pageNo+4); i++){
        pageTotalArray.push(i);
    }

    /**
     * 对结果集排序处理,保证顺序
     */
    return pageTotalArray.sort(function(a, b){
        return a - b;
    });
}

module.exports = router;